安卓开发文档翻译:打印HTML文档,Printing HTML Documents
要在安卓系统中打印除简单照片之外的内容的话,就需要在打印文档中编排文本和图形内容。安卓框架提供了一种方式,可以使用HTML来编排文档内容,并且使用较少的代码来打印它。
在安卓 4.4(应用编程接口级别19) 中, WebView 类进行 了更新, 以支持 对 HTML 内容的打印。 这个类,允许妳载入一个本地 HTML资源或者 从互联网上下载某个网页,创建 一个打印任务,然后 将它提交给安卓的打印服务。
本课程向妳展示了,如何快速地构建一个HTML 文档,以容纳 要打印的文本和图形内容,然后使用 WebView 来打印它。
使用 WebView 来 打印HTML文档 ,需要载入 一个HTML 资源或者以字符串的形式构建一个HTML 文档。 本小节说明的是,如何构建 一个 HTML字符串 ,并且将它载入到一个 WebView 中,以便打印。
这个视图对象,一般都是用于某个活动布局 中的一部分。然而 ,如果 妳的应用程序中 未使用 WebView 的话,则, 妳可以创建这个类的实例, 以特别用于打印目的。创建 这个自定义打印视图的主要步骤如下:
1. 创建 一个 WebViewClient ,让它在HTML 资源载入完毕之后启动一个打印任务。
2. 将HTML 资源载入到 WebView 对象中。
以下代码示例,演示的是,如何创建 一个简单的 WebViewClient ,并且载入 一个快速创建的HTML 文档:
private WebView mWebView;
private void doWebViewPrint() {
// 创建 一个专门用于打印的WebView 对象
WebView webView = new WebView(getActivity());
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
Log.i(TAG, "page finished loading " + url);
createWebPrintJob(view);
mWebView = null;
}
});
// 快速生成 一个HTML 文档:
String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " +
"testing, testing...</p></body></html>";
webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null);
// 保留 对该WebView 对象的一个引用,直到 妳将该PrintDocumentAdapter传递到PrintManager为止
mWebView = webView;
}
注意 : 确保 妳要在之前小节中创建 的 WebViewClient 的 onPageFinished() 方法中才调用代码,以生成打印任务。如果 妳不等到页面载入完毕,那么 ,打印输出 的内容可能 是不完整的,或者是空白的,或者,甚至可能完全打印失败。
注意 : 上面的示例代码中,保留 了该 WebView 对象的一个实例, 以确保, 它不会在打印任务创建之前被垃圾回收。 请确保在妳自己的代码中也是这样做的,否则,打印过程可能失败 。
如果 妳想要在页面中包含图像内容,则, 将图像文件放置到妳的项目的 assets/ 目录中,并且 ,在 loadDataWithBaseURL() 方法的第一个参数中指定一个基准网址,正如 以下示例代码中那样:
webView.loadDataWithBaseURL("file:///android_asset/images/", htmlBody,
"text/HTML", "UTF-8", null);
妳也可以载入一个网页以进行打印,具体就是 将 loadDataWithBaseURL() 方法替换成 loadUrl() , 就像以下示例中那样。
// 打印一个已有的网页(记得要获取INTERNET权限!):
webView.loadUrl("http://developer.android.com/about/index.html");
在使用 WebView 创建打印文档时,妳应当注意以下限制:
•. 妳无法向文档中添加页眉及页脚,包括页码也无法添加。
•. 对于HTML 文档,其打印选项不支持指定打印的页码范围,例如:想要打印一个10 页的HTML 文档中的第2 到4 页,这是不支持的。
•. 一个 WebView 实例,一次只能处理一个打印任务。
•.包含CSS 打印属性(例如横向模式属性)的HTML文档,是不支持的。
•. 妳无法在HTML 文档中使用 JavaScript 来触发打印过程。
注意 : 布局 中包含的 WebView 对象,在它载入了文档之后,其内容也可以被打印。
如果 妳想要创建一个更加自定义的打印输出,并且 想要完全控制打印出来 的页面上绘制出来的内容,那么 , 请阅读下一篇课程: 打印 自定义文档 。
在创建了 WebView 并且载入 了HTML 内容之后, 在打印这件事上,妳的应用程序已经快要做完它的工作了。 接下来的步骤就是,访问到 PrintManager ,创建一个打印适配器,最终,创建一个打印任务。 以下示例,展示了,如何完成这些步骤:
private void createWebPrintJob(WebView webView) {
// 获取 到一个PrintManager 实例
PrintManager printManager = (PrintManager) getActivity()
.getSystemService(Context.PRINT_SERVICE);
// 创建 一个打印适配器实例
PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter();
// 创建 一个打印任务,指定名字和适配器实例
String jobName = getString(R.string.app_name) + " Document";
PrintJob printJob = printManager.print(jobName, printAdapter,
new PrintAttributes.Builder().build());
// 保留 该任务对象,以便日后检查状态
mPrintJobs.add(printJob);
}
这个示例中,保留了该 PrintJob 对象的一个实例,以让应用程序本身使用,当然,这并不是必要的动作。 妳的应用程序可使用这个对象来在打印过程中跟踪打印任务的进度。 这种做法,狠有用的, 妳可以用这种方法来监视 该打印任务的状态, 以得知任务是否最终完成 、是否失败,或者 是否被用户取消了。 不需要在妳的应用中创建一个通知项,因为,打印框架会自动为该打印任务创建一个系统级的通知项。
小米
Your opinionsHxLauncher: Launch Android applications by voice commands